package com.ruoyi.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.system.domain.OperationLog;
import com.ruoyi.system.enums.OperateActionEnum;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

@Mapper
public interface OperationLogMapper extends BaseMapper<OperationLog> {

    /**
     * 分页查询操作日志（支持按业务类型、操作人、时间范围筛选）
     * 注：若基础分页满足需求，可无需自定义此方法，直接使用 Service 层的 page 方法
     */
    IPage<OperationLog> selectLogPage(
            Page<OperationLog> page,
            @Param("businessType") String businessType, // 业务类型（可选）
            @Param("operateUserId") Long operateUserId, // 操作人ID（可选）
            @Param("startTime") LocalDateTime startTime, // 开始时间（可选）
            @Param("endTime") LocalDateTime endTime // 结束时间（可选）
    );

    /**
     * 根据业务关联ID查询所有操作日志（不分页）
     *
     * @param businessId 业务关联ID（如图纸ID、订单ID）
     * @return 操作日志列表
     */
    default List<OperationLog> selectByBusinessId(String businessId) {
        // 利用 MyBatis-Plus 的 QueryWrapper 构建条件
        return selectList(
                new com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<OperationLog>()
                        .eq("business_id", businessId)  // 匹配业务ID
                        .eq("is_deleted", 0)            // 过滤已删除记录
                        .orderByDesc("operate_time")    // 按操作时间倒序（最新的在前）
        );
    }


    /**
     * 根据业务关联ID查询所有操作日志（H5）
     *
     * @param businessId 业务关联ID（如图纸ID、订单ID）
     * @return 操作日志列表
     */
    default List<OperationLog> selectByBusinessIdForH5(String businessId) {
        // 利用 MyBatis-Plus 的 QueryWrapper 构建条件
        return selectList(
                new com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<OperationLog>()
                        .eq("business_id", businessId)  // 匹配业务ID
                        .eq("is_deleted", 0)            // 过滤已删除记录
                        .eq("is_sync_h5_design", 1)            // H5
                        .in("operate_action", OperateActionEnum.getAllDesignActionCodes())            // 同步状态
                        .orderByDesc("operate_time")    // 按操作时间倒序（最新的在前）
        );
    }

    /**
     * 根据业务关联ID和业务类型查询（更精确的查询）
     *
     * @param businessId   业务关联ID
     * @param businessType 业务类型（如 DESIGN、ORDER）
     * @return 操作日志列表
     */
    default List<OperationLog> selectByBusinessIdAndType(String businessId, String businessType) {
        return selectList(
                new com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<OperationLog>()
                        .eq("business_id", businessId)
                        .eq("business_type", businessType)  // 增加业务类型过滤
                        .eq("is_deleted", 0)
                        .orderByDesc("operate_time")
        );
    }
}
